<template>
    <div>登录中</div>
</template>

<script setup>
import { authApi, refreshToken } from '@/api/system/index';
import { authLoginUrl } from '@/config/env'; // 引入域账号登录的URL配置
import { useAuthStore } from '@/stores/auth'; // 引入 Pinia store 用于管理 token
import { useMenuStore } from '@/stores/menu'; // 引入菜单 store
import { syncToCookies } from '@/utils/storage'; // 引入全局存储同步方法
import { useAbility } from '@casl/vue';
import { nextTick, onMounted } from 'vue'; // 引入 onMounted 钩子和 nextTick
import { useRouter } from 'vue-router'; // 引入 Vue Router

const router = useRouter();
const ability = useAbility()
const authStore = useAuthStore();  // 使用 Pinia 管理 token

definePage({
    meta: {
        layout: 'blank', // 默认布局
        unauthenticatedOnly: true, // 不需要验证
    },
})

// 组件挂载时默认调用的方法
onMounted(() => {
    getNewToken();
});

// 获取 URL 中的查询参数
function getQueryVariable(variable) {
    const query = window.location.search.substring(1);
    const vars = query.split('&');
    for (let i = 0; i < vars.length; i++) {
        const pair = vars[i].split('=');
        if (pair[0] === variable) return pair[1];
    }
    return false;
}
// 获取新的 Token（调用刷新 Token 接口）
const getNewToken = async () => {
    const userInfo = JSON.parse(window.localStorage.getItem('justech-userInfo'));
    const refreshTokenStr = JSON.parse(window.localStorage.getItem('justech-refreshToken'));
    if (refreshTokenStr != null) {
        await refreshToken(refreshTokenStr.content, userInfo.content.tenant_id).then((res) => {
            // debugger
            if (res.status !== 200) {
                auth();  // 如果刷新失败，调用 auth 方法进行域账号登录
            } else {
                // 刷新成功后，更新 Pinia store 中的 token 信息
                authStore.setToken(res.data);
                // 使用全局方法同步到cookies
                syncToCookies();
                // 获取用户菜单
                const menuStore = useMenuStore();
                menuStore.fetchUserMenus();
                // 这里是登录成功之后的跳转
                nextTick(() => {
                    router.push('/')
                })
            }
        }).catch(() => {
            auth();  // 如果刷新失败，调用 auth 方法
        });
    } else {
        auth();  // 如果没有 refreshTokenStr，调用 auth 方法
    }
}

// 域账号登录方法
const auth = async () => {
    const tokenFromURL = getQueryVariable('token');
    if (tokenFromURL) {
        const params = {
            adKey: tokenFromURL,
            grant_type: 'AD',
            scope: 'all',
            type: 'account',
        };
        await authApi(params).then((res) => {
            // 登录成功后，通过 Pinia 管理 token
            authStore.setToken(res.data);
            // 使用全局方法同步到cookies
            syncToCookies();
            // 获取用户菜单
            const menuStore = useMenuStore();
            menuStore.fetchUserMenus();
            // 跳转到首页
            nextTick(() => {
                router.push('/')
            })
        }).catch(() => {
            authStore.clearToken();// 清除 localStorage 数据
            nextTick(() => {
                router.push({ name: 'login' })
            })
        });
    } else {
        // 跳转到 SSO 登录页面
        window.location.href = `http://10.66.52.102/v3/?back_url=${authLoginUrl}&AppID=MES`;
    }
}

</script>

<style scoped>
</style>
